#include <stdlib.h>
#include <unistd.h>
#include "msgq.h"
#include "tools.h"
#include <string.h>

Ctos ctos;
Stoc stoc;

void sub_menu(void);

void open_acc(void)
{
	ctos.type = TYPE_OPEN;
	
	pf("请输入姓名：");
	get_str(ctos.acc.name,20);
	pf("请输入身份证号:");
	get_str(ctos.acc.card,19);
	pf("请设置您的密码:");
	sf("%d",&ctos.acc.pass);
	ctos.acc.flag = 0;
	ctos.acc.count = 3;
	ctos.acc.money =0;
	ctos_send(&ctos);
	stoc_recv(&stoc,ctos.pid);
	pf("server:%s\n",stoc.str);
	sleep(3);
}

void login(void)
{
	while(1)
	{
		ctos.type = TYPE_LOGIN;
		pf("请输入账号：");
		sf("%d",&ctos.acc.id);
		pf("请输入密码：");
		sf("%d",&ctos.acc.pass);
		ctos_send(&ctos);
		stoc_recv(&stoc,ctos.pid);
		pf("server:%s\n",stoc.str);
		sleep(3);
		if(0 == strcmp(stoc.str,"登陆成功！"))
		{
			break;
		}
		else if(0 == strcmp(stoc.str,"账号或密码错误!"))
		{
			continue;
		}
		else
		{
			return;
		}
	}
	sub_menu();
}

void destory(void)
{
	ctos.type = TYPE_DESTORY;
	pf("请输入账号：");
	sf("%d",&ctos.acc.id);
	pf("请输入姓名：");
	get_str(ctos.acc.name,20);
	pf("请输入身份证号:");
	get_str(ctos.acc.card,19);
	pf("请输入密码:");
	sf("%d",&ctos.acc.pass);
	ctos_send(&ctos);
	stoc_recv(&stoc,ctos.pid);
	pf("server:%s\n",stoc.str);
	sleep(3);
}

void unlock(void)
{
	ctos.type = TYPE_UNLOCK;
	pf("请输入账号：");
	sf("%d",&ctos.acc.id);
	pf("请输入姓名：");
	get_str(ctos.acc.name,20);
	pf("请输入身份证号:");
	get_str(ctos.acc.card,19);
	pf("请输入密码:");
	sf("%d",&ctos.acc.pass);
	ctos_send(&ctos);
	stoc_recv(&stoc,ctos.pid);
	pf("server:%s\n",stoc.str);
	sleep(3);
}

void save(void)
{
	ctos.type = TYPE_SAVE;
	pf("请输入存款金额：");
	sf("%f",&ctos.acc.money);
	ctos_send(&ctos);
	stoc_recv(&stoc,ctos.pid);
	pf("server:%s\n",stoc.str);
	sleep(3);
}

void take(void)
{
	ctos.type = TYPE_TAKE;
	pf("请输入取款金额：");
	sf("%f",&ctos.acc.money);
	ctos_send(&ctos);
	stoc_recv(&stoc,ctos.pid);
	pf("server:%s\n",stoc.str);
	sleep(3);
}

void transf(void)
{
	ctos.type = TYPE_TRANSF;
	pf("请输入转账账户：");
	sf("%d",&ctos.acc.transf_id);
	pf("请输入转账金额：");
	sf("%f",&ctos.acc.money);
	ctos_send(&ctos);
	stoc_recv(&stoc,ctos.pid);
	pf("server:%s\n",stoc.str);
	sleep(3);
}

void query(void)
{
	ctos.type = TYPE_QUERY;
	ctos_send(&ctos);
	stoc_recv(&stoc,ctos.pid);
	pf("server:%s\n",stoc.str);
	sleep(3);
}

void main_menu()
{
	for(;;)
	{
		system("clear");
		pf("1、开户	2、登录\n");
		pf("3、销户	4、解锁\n");
		switch(get_cmd('1','4'))
		{
			case '1': open_acc(); break;
			case '2': login(); break;
			case '3': destory(); break;
			case '4': unlock(); break;
			case 27: return;
		}
	}
}

void sub_menu(void)
{
	for(;;)
	{
		system("clear");
		pf("1、在款	2、取款\n");
		pf("3、转账	4、查余	5、返回\n");
		switch(get_cmd('1','5'))
		{
			case '1': save(); break;
			case '2': take(); break;
			case '3': transf(); break;
			case '4': query(); break;
			case '5': return;
		}
	}
}

int main()
{
	ctos.pid = getpid();
	// 初始化消息队列
	init_msgq();
	// 进入主菜单
	main_menu();
}
